package matheus.tp01cg.objetosdedesenho;

/**
 * Para realizar desenhos de retangulos. Utiliza a classe Poligono como base
 * 
 * @author matheus
 * 
 */
public abstract class Retangulo extends Poligono {

	private Coords[] vertices = new Coords[4];

	public Retangulo(Coords a, Coords b, int corBorda, int corPreenchimento)
			throws Exception {
		super(corBorda, corPreenchimento);
		inicializa(a, b, corBorda, corPreenchimento);
	}

	public Retangulo(Coords p, int largura, int altura, int corBorda,
			int corPreenchimento) throws Exception {
		super(corBorda, corPreenchimento);
		inicializa(p, new Coords(p.x + largura, p.y + altura), corBorda,
				corPreenchimento);
	}

	private void inicializa(Coords a, Coords b, int corBorda,
			int corPreenchimento) throws Exception {
		vertices[0] = a;
		vertices[1] = new Coords(b.x, a.y);
		vertices[2] = b;
		vertices[3] = new Coords(a.x, b.y);
		adicionarVertice(vertices[0]);
		adicionarVertice(vertices[1]);
		adicionarVertice(vertices[2]);
		adicionarVertice(vertices[3]);
		fechar();
	}

	public void recalcularCoordenadasGeradas() {
		vertices[1].x = vertices[2].x;
		vertices[1].y = vertices[0].y;
		vertices[3].x = vertices[0].x;
		vertices[3].y = vertices[2].y;
	}

	public abstract Retangulo retanguloCreate(Coords a, Coords b, int corBorda,
			int corPreenchimento) throws Exception;

	public abstract Retangulo retanguloCreate(Coords p, int largura,
			int altura, int corBorda, int corPreenchimento) throws Exception;

	public Coords obterPontoA() {
		return vertices[0];
	}

	public Coords obterPontoB() {
		return vertices[2];
	}

}